﻿using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Audio;

namespace BeatingMole
{
    public class CInfoEnemy
    {
        #region "Variable"
        public ContentManager _content;
        public SpriteBatch _spriteBatch;
        public GameTime _gameTime;

        private int _health;                                // Lượng máu của mỗi Enemy
        private int _score;                                 // Điểm của mỗi Enemy
        private Texture2D _spriteSheet;                     // Hình lớn của mỗi Enemy
        private Dictionary<string, Rectangle> _xmlEnemy;    // File XML lưu trữ Rectangle mỗi Enemy           
        private float _timeAppeared;                        // Thời gian xuất hiện tính bằng miliseconds
        private int _timeOut;                               // Thời gian kết thúc
        private Rectangle _recEnemy;                        // Rectangle frame Enemy
        private string _nameImages;                         // Tên Frame
        private int _numberFrames;                          // Số Frames của 1 trạng thái
        private int _posImages;                             // Số thứ tự cắt hình
        private Vector2 _posMouse;                          // Tọa độ Enemy       
        private State _status;                              // Trạng thái của mỗi Enemy
        private SoundEffect _deathSound;                    // Âm thanh Enemy khi chết
        private SoundEffect _upSound;                       // Âm thanh Enemy xuất hiện
        #endregion

        #region "Properties
        /// <summary>
        ///  SoundEffects khi Enemy xuất hiện
        /// </summary>
        public SoundEffect UpSound
        {
            set { _upSound = value; }
            get { return _upSound; }
        }
        /// <summary>
        /// SoundEffects khi Enemy die
        /// </summary>
        public SoundEffect Death
        {
            set { _deathSound = value; }
            get { return _deathSound; }
        }
        /// <summary>
        /// Số điểm của Enemy
        /// </summary>
        public int Score
        {
            set { _score = value; }
            get { return _score; }
        }

        /// <summary>
        /// Tổng số Frames hình của mỗi trạng thái Enemy
        /// </summary>
        public int NumberFrames
        {
            set { _numberFrames = value; }
            get { return _numberFrames; }
        }
        /// <summary>
        /// Hình lớn của mỗi Enemy
        /// </summary>
        public Texture2D SpriteSheet
        {
            set { _spriteSheet = value; }
            get { return _spriteSheet; }
        }
        /// <summary>
        /// File XML Enemy
        /// </summary>
        public Dictionary<string, Rectangle> XmlEnemy
        {
            set { _xmlEnemy = value; }
            get { return _xmlEnemy; }
        }
        /// <summary>
        /// Trạng thái của Enemy
        /// </summary>
        public State Status
        {
            set { _status = value; }
            get { return _status; }
        }
        /// <summary>
        /// Tọa độ Enemy trên màn hình
        /// </summary>
        public Vector2 PosMouse
        {
            set { _posMouse = value; }
            get { return _posMouse; }
        }
        /// <summary>
        /// Rectangle của Enemy
        /// </summary>
        public Rectangle RecEnemy
        {
            set { _recEnemy = value; }
            get { return _recEnemy; }
        }
        /// <summary>
        /// Tên hình cắt. VD: mole_upa,..
        /// </summary>
        public string NameImages
        {
            set { _nameImages = value; }
            get { return _nameImages; }
        }
        /// <summary>
        /// Số thứ tự frame của mỗi hình trạng thái
        /// </summary>
        public int PosImages
        {
            set { _posImages = value; }
            get { return _posImages; }
        }
        /// <summary>
        /// Lượng máu của mỗi Enemy
        /// </summary>
        public int Health
        {
            set { _health = value; }
            get { return _health; }
        }
        /// <summary>
        /// Thời gian xuất hiện
        /// </summary>
        public float TimeAppeared
        {
            set { _timeAppeared = value; }
            get { return _timeAppeared; }
        }
        /// <summary>
        /// Thời gian mất đi
        /// </summary>
        public int TimeOut
        {
            set { _timeOut = value; }
            get { return _timeOut; }
        }
        #endregion

        #region "Constructor"
        /// <summary>
        /// Phương thức khởi tạo không tham số
        /// </summary>
        public CInfoEnemy()
        {
        }

        /// <summary>
        /// (Nguyễn Kim Nhất Quý)
        /// Khởi tạo với 3 tham số hệ thống
        /// </summary>
        /// <param name="content"></param>
        /// <param name="sprite"></param>
        /// <param name="time"></param>
        public CInfoEnemy(ContentManager content)
        {
            _content = content;
            _deathSound = _content.Load<SoundEffect>(@"Resource/Sound/Wav/raremouse");
            _upSound = _content.Load<SoundEffect>(@"Resource/Sound/Wav/SlotAddBet");
            _health = 20;
            _nameImages = "mole_up_a";
            _numberFrames = 3;
            _posImages = 0;
            _status = State.Up;
            _score = 5;
        }

        /// <summary>
        /// Phương thức khởi tạo có tham số
        /// </summary>
        /// <param name="health">Máu</param>
        /// <param name="spriteBatch">Tập ảnh</param>
        /// <param name="xmlRectangle">Tập tin tọa độ để cắt ảnh</param>
        /// <param name="timeAppeared">Khoảng thời gian xuất hiện giữa 2 kẻ địch</param>
        /// <param name="timeOut">Thời gian xuất hiện của kẻ địch</param>
        public CInfoEnemy(ContentManager content, int health, int posImages,
            string nameImages, Texture2D spriteSheet, Dictionary<string, Rectangle> xmlEnemy, int timeAppeared,
            int timeOut, Vector2 posMouse, State status)
        {

        }

        /// <summary>
        /// Phương thức sao chép đối tượng Enemy
        /// </summary>
        /// <param name="enemy">Đối tượng Enemy</param>
        public CInfoEnemy(CInfoEnemy enemy)
        {
            _health = enemy.Health;
            _score = enemy.Score;
            _spriteSheet = enemy.SpriteSheet;
            _xmlEnemy = enemy._xmlEnemy;
        }
        #endregion

        #region "Methods"
        /// <summary>
        /// (Nguyễn Kim Nhất Quý)
        /// Kiểm tra giá trị trạng thái Enemy
        /// </summary>
        public virtual void CheckEnemyStatus()
        {

        }
        #endregion
    }
}
